import Vue from 'vue'
import { getUserAuthority } from '@/utils/service'
// import { getSystemPowerList } from '@/api/system/powerConfig.js'
// import testMenus from './test.json'
/**
 * @desc 用户权限标识
 * 供稿端 provideEnd 管理端 manageEnd 取稿端 fetchEnd
 */

const requireRoutes_provideEnd = () => {
  return require.context(
    // 其组件目录的相对路径
    './modules/provideEnd',
    // 是否查询其子目录
    false,
    // 匹配基础组件文件名的正则表达式
    /.js$/,
  )
}

const requireRoutes_manageEnd = () => {
  return require.context(
    // 其组件目录的相对路径
    './modules/manageEnd',
    // 是否查询其子目录
    false,
    // 匹配基础组件文件名的正则表达式
    /.js$/,
  )
}

const requireRoutes_fetchEnd = () => {
  return require.context(
    // 其组件目录的相对路径
    './modules/fetchEnd',
    // 是否查询其子目录
    false,
    // 匹配基础组件文件名的正则表达式
    /.js$/,
  )
}

export const getRoutes = async () => {
  const a = await getUserAuthority()
  switch (a) {
    case 'provideEnd':
      return requireRoutes_provideEnd()
    case 'manageEnd':
      return requireRoutes_manageEnd()
    case 'fetchEnd':
      return requireRoutes_fetchEnd()
    default:
      Vue.prototype.$Message.error('unknow userAuthority!')
      throw new Error('unknow userAuthority!')
  }
}

export const getMenus = async (userInfo) => {
  const routesModules = []
  const requireRoute = await getRoutes()
  requireRoute.keys().forEach((key) => {
    routesModules.push(requireRoute(key).default || requireRoute(key))
  })
  // console.log('routesModules', routesModules)

  // 获取当前用户的菜单权限
  /* const res = await getSystemPowerList({ roleId: 2 })
  if (res.data.status !== 0) {
    Vue.prototype.$Message.error('获取用户权限错误!')
    return []
  }
  const menus = res.data.data || [] */

  /* const menus = testMenus
  const manageMenu = menus[1] // 三个端的系统是不会显示在一起的
  manageMenu.checked = setMenuIsChecked(manageMenu.children)

  if (!manageMenu.checked) {
    return []
    const res = setRouterModules(routesModules, manageMenu.children)
  } */

  const resource = userInfo.resource
  const res = setRouterModules(routesModules, resource)
  return res
}

/**
 * @desc 设置菜单 checked 值，子节点有一个为true就是true
 *
 * @param { Array } menus 菜单
 *
 *@return { boolean } isCheck 是否选中
 */
const setMenuIsChecked = (menus) => {
  if (!Array.isArray(menus) || !menus.length) {
    console.warn('[wran setMenuIsChecked] 菜单错误或者为空')
    return []
  }

  let isCheck = false
  for (let i = 0, len = menus.length; i < len; i++) {
    if (!isCheck && menus[i].checked) {
      isCheck = true
    }
    if (Array.isArray(menus[i].children)) {
      menus[i].checked = setMenuIsChecked(menus[i].children)
      // isCheck 为 true 说明 i 之前的菜单有选中的了，有一个选中就行，不需要进行判断了
      if (!isCheck) {
        isCheck = menus[i].checked
      }
    }
  }
  return isCheck
}

/**
 * @desc 根据 currentMenu 获取有权限的路由
 *
 * @param { modules } 根据不同权限获取的全部路由
 * @param { array } currentMenu 有权限的菜单那
 *
 * @return { array } 有权限的路由
 */
const setRouterModules = (modules, currentMenu) => {
  /* 开发环境不做限制 */
  /* if (process.env.NODE_ENV === 'development') {
    return modules
  } */

  if (!Array.isArray(currentMenu) || !currentMenu.length) {
    console.warn('[wran setRouterModules] 菜单错误或者为空，值为：' + currentMenu)
    return []
  }
  const res = []

  for (let i = 0, len = modules.length; i < len; i++) {
    const item = modules[i]

    /* 白名单忽略 */
    if (item.meta && item.meta.whiteList) {
      res.push(item)
      continue
    }

    /* 当前菜单权限是否有权限 */
    const fv = currentMenu.find((c) => c.url === item.meta.url)
    if (!fv) {
      // if (!fv || !fv.checked) {
      continue
    }

    if (Array.isArray(item.children)) {
      // item.children = setRouterModules(item.children, fv.children)
      item.children = setRouterModules(item.children, currentMenu)
      // 重新设置重定向地址
      if (item.children.length) {
        item.redirect = item.path + '/' + item.children[0].path
      }
    }
    res.push(item)
  }

  return res
}
